cmake_minimum_required(VERSION 3.22 FATAL_ERROR)

project(pjt5 LANGUAGES C CXX)

##################  1 配置时  ##################
# 配置时的自定义指令，一般用于获取git版本，生成构建需要的文件操作
execute_process(COMMAND git describe --always --tags
                OUTPUT_VARIABLE GIT_BRANCH_ORIGIN)
if("x" STREQUAL "x${GIT_BRANCH_ORIGIN}")
  set(GIT_BRANCH_ORIGIN "v0.0-0-g0000000")
endif()
#去除空白字符后赋值给GIT_BRANCH
string(STRIP ${GIT_BRANCH_ORIGIN} GIT_BRANCH)
message("current version:" ${GIT_BRANCH_ORIGIN})
# 将GIT_BRANCH变量写入文件
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/version.h.in
               ${CMAKE_CURRENT_BINARY_DIR}/version.h @ONLY)


add_executable(pjt5 src/main.cpp)

##################  2 构建时 ##################
# add_custom_target 用于创建一个逻辑目标，表示一个自定义构建动作，不生成构建输出。
# add_custom_command 用于创建一个自定义构建规则，定义输入文件和输出文件之间的转换操作，会生成构建输出。


# add_custom_command通常用于为生成文件、编译资源等操作定义自定义命令
# 将生成的可执行文件重命名
add_custom_command(
  TARGET pjt5
  POST_BUILD
  COMMAND cp $<TARGET_FILE:pjt5> $<TARGET_FILE:pjt5>_${GIT_BRANCH}
  COMMENT "Add version information to target.")

# add_custom_target 适用于执行构建过程中的额外操作，如运行测试、生成文档、打包等
add_custom_target(my_target
    COMMAND echo "Running custom target"
)